Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

382
Vistas
Postgres "la columna $ 3 no existe" cuando se usan parámetros

Me encuentro con un error al intentar usar parámetros como parte de mi consulta.

Las partes notables de mi esquema son:

name_tokens tsvector

cards.rarity card_rarity que es una enumeración personalizada creada a partir de: create type card_rarity as enum ('C', 'T', 'R', 'S', 'M', 'L', 'F', 'P');

La consulta problemática es:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery("$1"::text)) AND (cards.rarity = "$2"::card_rarity) ORDER BY cards.id;

con entrada de:

 [ 'absorb & in', 'L' ]

Cuando ejecuto esto, el error dice:

UnhandledPromiseRejectionWarning: error: column "$3" does not exist .

Cuando ejecuto esta consulta sin parámetros, funciona bien, es decir:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery('absorb & in') AND (cards.rarity = 'L') ORDER BY cards.id;

Me gustaría poder utilizar parámetros, ya que lanzar cadenas de usuario directamente en una consulta puede ser peligroso.

¿Alguna idea de por qué recibo este error? Supongo que es un formato incorrecto o el uso de comillas cuando no debería o algo así. Cualquier ayuda es apreciada :)

Editar: Se sugirió que probé:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery($1::text)) AND (cards.rarity = $2::card_rarity) ORDER BY cards.id;

Pero cuando hago esto, aparece el siguiente error: UnhandledPromiseRejectionWarning: error: could not determine data type of parameter $1

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

PostgreSQL usa comillas dobles para los identificadores (como nombres de tablas y columnas), por lo que esto:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery("$1"::text)) AND (cards.rarity = "$2"::card_rarity) ORDER BY cards.id;

contiene dos identificadores entrecomillados "$1" y "$2" , pero ningún marcador de posición numerado.

Si desea utilizar marcadores de posición numerados, elimine las comillas dobles:

 SELECT cards.* FROM cards WHERE (name_tokens @@ to_tsquery($1::text)) AND (cards.rarity = $2::card_rarity) ORDER BY cards.id;

Sin embargo, no estoy seguro de dónde obtiene "$3" , supongo que el error proviene de una consulta diferente con un error de cotización similar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda